//
//  Problem1005.swift
//  LeetCode
//
//  Created by 毕武侠 on 2023/6/23.
//  Copyright © 2023 zhulongiMac02. All rights reserved.
//

import UIKit

/*
 1005. K 次取反后最大化的数组和 简单

 给你一个整数数组 nums 和一个整数 k ，按以下方法修改该数组：
 选择某个下标 i 并将 nums[i] 替换为 -nums[i] 。
 重复这个过程恰好 k 次。可以多次选择同一个下标 i 。
 以这种方式修改数组后，返回数组 可能的最大和 。

 示例 1：
     输入：nums = [4,2,3], k = 1
     输出：5
     解释：选择下标 1 ，nums 变为 [4,-2,3] 。
 示例 2：
     输入：nums = [3,-1,0,2], k = 3
     输出：6
     解释：选择下标 (1, 2, 2) ，nums 变为 [3,1,0,2] 。
 示例 3：
     输入：nums = [2,-3,-1,5,-4], k = 2
     输出：13
     解释：选择下标 (1, 4) ，nums 变为 [2,3,-1,5,4] 。

 提示：
 1 <= nums.length <= 104
 -100 <= nums[i] <= 100
 1 <= k <= 104
 */
class Problem1005: NSObject {
    func largestSumAfterKNegations(_ nums: [Int], _ k: Int) -> Int {
        var list = nums.sorted()
        var sum = 0
        var kk = k
        for i in (0..<list.count) {
            if kk > 0 {
                if list[i] < 0 {
                    list[i] = -list[i]
                } else {
                    if kk % 2 != 0 {
                        if i > 0, list[i] > list[i-1] {
                            list[i-1] = -list[i-1]
                            sum += list[i-1] + list[i-1]
                        } else {
                            list[i] = -list[i]
                        }
                    }
                    kk = 0
                }
                kk -= 1
            }
            print(list[i])
            sum += list[i]
        }
        if kk > 0, kk % 2 != 0 {
            sum -= (list.last! + list.last!)
        }
        
        return sum
    }
}
